//
//  SortableControllerProtocol.swift
//
//  Created by 谢强 on 15/03/2018.
//  Copyright © 2018 谢强. All rights reserved.
//

import UIKit

// MARK: - delegate
public protocol JWSortableTableViewDelegate: class {
    
    /**
     User has moved a row from one location to another.
     Use this method to update data source.
    */
    func jw_tableView(_ tableView: UITableView,
                      fromRowAt sourceIndexPath: IndexPath,
                      to destinationIndexPath: IndexPath)
    
    /**
     Tells whether a given row is sortable.
     */
    /// - Returns: sortable
    func jw_tableView(_ tableView: UITableView,
                      isSortableAt indexPath: IndexPath) -> Bool
    
    /**
     When attempting to move a row from one location to another,
     user can use this method to modify the new location.
     */
    /// - Returns: destination location
    func jw_tableView(_ tableView: UITableView,
                      targetIndexPathFromRowAt sourceIndexPath: IndexPath,
                      to proposedDestinationIndexPath: IndexPath) -> IndexPath
    
    /**
     Returns a custom cell under the moving cell.
     */
    func jw_tableViewEmptyCell(_ tableView: UITableView) -> UITableViewCell?
    
    /**
     Sort begin.
    */
    /// - Parameters: fromIndexPath
    func jw_tableViewSortBegin(_ tableView: UITableView,
                               from fromIndexPath: IndexPath)
    
    /**
     Sort end.
     */
    /// - Parameters: destinationIndexPath
    func jw_tableViewSortEnd(_ tableView: UITableView,
                             destination destinationIndexPath: IndexPath)
}

public extension JWSortableTableViewDelegate {
    
    func jw_tableView(_ tableView: UITableView,
                      isSortableAt indexPath: IndexPath) -> Bool {
        return true
    }
    
    func jw_tableView(_ tableView: UITableView,
                      targetIndexPathFromRowAt sourceIndexPath: IndexPath,
                      to proposedDestinationIndexPath: IndexPath) -> IndexPath {
        return proposedDestinationIndexPath
    }
    
    func jw_tableViewEmptyCell(_ tableView: UITableView) -> UITableViewCell? {
        return nil
    }
    
    func jw_tableViewSortBegin(_ tableView: UITableView,
                               from fromIndexPath: IndexPath) {
        
    }
    
    func jw_tableViewSortEnd(_ tableView: UITableView,
                             destination destinationIndexPath: IndexPath) {
        
    }
}
